//顺序存储的栈
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

typedef struct stack
{
    int data[32];   //数组
    int top;        //栈顶位置的下标
}Stack;

//栈的初始化
void init(Stack *s);
//判断栈是否为空
bool empty(Stack *s);
//清除栈内元素
void clean(Stack *s);
//进栈
void push(Stack *s,int n);
//出栈
int pop(Stack *s);
//只读不删
int peek(Stack *s);
//查看栈的大小
int size(Stack *s);

int main()
{
    Stack *s = malloc(sizeof(Stack));
    init(s);
    int n = 9;
    while(n!=0)
    {
        push(s,n%2);
        n/=2;
    }
    while(!empty(s))
    {
        printf("%d ",pop(s));
    }

    // push(s,1);
    // push(s,2);
    // push(s,3);
    // int flag =size(s);
    // while(flag)
    // {
    //     printf("%d ",s->data[flag-1]);
    //     flag--;
    // }
    // printf("\n");

    // int p = pop(s);

    // flag =size(s);
    // while(flag)
    // {
    //     printf("%d ",s->data[flag-1]);
    //     flag--;
    // }
    // printf("\n");

    return 0;
}

void init(Stack *s)
{
    s->top = -1;
}
int size(Stack *s)
{
    return s->top+1;
}

void push(Stack *s,int n)
{
    s->top++;
    s->data[s->top] = n;

    // s->data[++s->top] = n;
}

int pop(Stack *s)
{
    int n = s->data[s->top];
    s->top--;
    return n;
}
int peek(Stack *s)
{
    return s->data[s->top];
}
bool empty(Stack *s)
{
    return s->top == -1;
}
void clean(Stack *s)
{
    s->top = -1;
}

